package errors

import (
	"demo/api/dto/response"
	"github.com/gin-gonic/gin"
	"log"
)

func ErrorHandler() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 使用 defer 包裹 recover
		defer func() {
			if recv := recover(); recv != nil {
				log.Printf("Panic: %v", recv)

				// 判断是否是业务错误
				if bizErr, ok := recv.(*BizError); ok {
					response.Error(bizErr.Code, bizErr.Message).JSON(c)
				} else {
					// 系统错误
					response.Error("B0000", "系统内部错误").JSON(c)
				}
				c.Abort() // 阻止后续处理
			}
		}()

		// 执行后续 handler
		c.Next()
	}
}
